declare type ButtonSize = 'lg' | 'md' | 'sm' | 'xl' | 'xs' | 'xxl';

declare type ButtonTheme = 'default' | 'light';

declare type DisplayType = 'page' | 'popup';

declare type FastLoginProps = {
    enable?: boolean;
    timeout?: number;
    mode?: 'default' | 'auto';
    onErrorAutoMode?: () => void;
    /** Callback функция вызываемая если не удалось осуществить быстрый вход в режиме default,
     * возвращает boolean значение указывающее необходимость продолжить вход по ссылке,
     * возвращаемое значение по умолчанию true
     * */
    onErrorDefaultMode?: () => boolean;
};

declare type MainButtonText = 'default' | 'resume' | 'login' | 'fill' | 'register' | 'start';

declare enum NotificationPosition {
    'topRight' = "top-right",
    'bottomRight' = "bottom-right",
    'topLeft' = "top-left",
    'bottomLeft' = "bottom-left"
}

declare type ThemeType = 'white' | 'dark';

declare type NotificationTextType = 'default' | 'loyalty';

declare type NotificationProps_2 = {
    baseUrl: string;
    onButtonClick: () => void;
    position: NotificationPosition;
    personalization: boolean;
    theme: ThemeType;
    textType: NotificationTextType;
    serviceName?: string;
    textOfferExtension?: string;
};

declare type OidcParams = {
    response_type: string;
    client_type: string;
    client_id: string;
    state: string;
    redirect_uri: string;
    scope: string;
    nonce: string;
    [key: string]: string;
};
declare type PersonalButtonText = 'default' | 'resume' | 'login';

declare type SberidButtonProps = {
    mainText?: MainButtonText;
    personalText?: PersonalButtonText;
    logo?: boolean;
    size?: ButtonSize;
    theme?: ButtonTheme;
    changeUser?: boolean;
};

declare class Notification_2 {
    #private;
    constructor({ onButtonClick, baseUrl, position, personalization, theme, textType, serviceName, textOfferExtension, }: NotificationProps_2);
    hide(): void;
    show(): void;
    getIsHide(): boolean;
    setPosition(position: NotificationPosition): void;
    getPosition(): NotificationPosition;
    setTheme(theme: ThemeType): void;
    getTheme(): ThemeType;
    destroy(): void;
}

declare type SendOtherAuthProps = {
    baseUrl?: string;
    client_id: string;
    authService: string;
    successAuth: boolean | null;
    isUserNew: boolean | null;
};

declare type NotificationProps = {
    enable?: boolean;
    position?: NotificationPosition;
    autoClose?: boolean;
    autoCloseDelay?: number;
    serviceName?: string;
    textType?: NotificationTextType;
    theme?: ThemeType;
    textOfferExtension?: string;
    onNotificationBannerClose?: () => void;
    onNotificationBannerOpen?: () => void;
};

declare type SberidSDKErrorResult = {
    description: string;
    code: string;
    error: string;
    state?: string;
};

declare type SberidSDKSuccessResult = {
    state: string;
    code: string;
};

declare type SberIdOnErrorCallback = (data?: SberidSDKErrorResult) => void;

declare type SberIdOnSuccessCallback = (data?: SberidSDKSuccessResult) => void;

export declare type SberidSDKProps = {
    oidc: OidcParams;
    container?: string;
    baseUrl?: string;
    debug?: boolean;
    display?: DisplayType;
    utmProxyDisabled?: boolean;
    personalization?: boolean;
    buttonProps?: SberidButtonProps;
    fastLogin?: FastLoginProps;
    notification?: NotificationProps;
    onButtonClick?: () => void;
    onErrorCallback?: SberIdOnErrorCallback;
    onSuccessCallback?: SberIdOnSuccessCallback;
    onPersonalizationStatus?: (personalization: boolean) => void;
    checkStorageAccess?: boolean;
};

export declare class SberIdSDK {
    #private;
    static logUid: string;
    constructor(config: SberidSDKProps);
    init(): Promise<{
        notification: Notification_2 | undefined;
        getLink: () => string | undefined;
        enable: () => void;
        disable: () => void;
        destroy: () => void;
    }>;
    destroy(): void;
    static getVersion(): string;
    static sendOtherAuth({ baseUrl, authService, client_id: clientID, successAuth, isUserNew, }: SendOtherAuthProps): Promise<void>;
    static pauseAutoLogin(domain?: string): void;
}
